package com.bilibili.mapper;

import com.bilibili.entity.*;
import com.bilibili.vo.CollectionVo;
import com.bilibili.vo.HistoryVo;
import com.bilibili.vo.PersonalData;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface PersonalMapper {
    /**
     * 根据用户名id，查找个人中心信息
     *
     * @param userId 用户id
     * @return 个人中心首页信息
     */
    PersonalData getPersonalByuserId(Integer userId);


    /**
     * 根据用户名查找用户信息
     *
     * @param userId 用户名
     * @return 用户信息
     */
    User getUserByuserId(Integer userId);


    /**
     *根据用户id获取用户个人详细信息
     *
     * @param userId 用户id
     * @return 个人详细信息
     */
    UserInfo getUserInfoByuserId(Integer userId);

    /**
     * 根据用户名id获取我的空间数据
     *
     * @param userId 用户id
     * @return
     */
    Space getSpaceByuserId(Integer userId);

    /**
     * 根据用户名id获取会员积分
     *
     * @param userId 用户id
     * @return
     */
    VipPoints getVipPointsByuserId(Integer userId);



    /**
     * 根据用户名id添加会员积分
     *
     * @param userId 用户id
     * @return
     */
    boolean addVipPoints(@Param("userId")Integer userId,
                         @Param("balance")Integer balance);


    /**
     * 添加用户信息
     *
     * @param userInfo 用户信息
     * @return 是否添加成功
     */
    boolean addUserInfo(UserInfo userInfo);


    /**
     * 更改用户信息
     *
     * @param userInfo 用户信息  userId 用户id
     * @return
     */
    boolean modifyUserInfo(@Param("userInfo") UserInfo userInfo, @Param("userId") Integer userId);




    /**
     * 根据用户id添加经验值
     *
     * @param
     * @return 是否添加成功
     */
    boolean addExp(@Param("userId")Integer userId,
                   @Param("exp")Integer exp);


    /**
     * 根据用户id添加硬币
     *
     * @param
     * @return 是否添加成功
     */
    boolean addCoin(@Param("userId")Integer userId,
                   @Param("coin")Integer coin);


    /**
     * 通过id，获取历史记录
     *
     * @param  vids  视频id
     * @return
     */
    List<Video> getVideosByIds(@Param("vids") List<Integer> vids);


    /**
     * 获取硬币记录
     * @param  userId  用户id
     * @return
     */
    List<MyCoin>  getAllCoinRecord(@Param("userId")Integer userId);

    /**
     * 是否存在每日观看视频
     * @param id   用户id
     * @return
     */
    boolean isExistTodayWatch(@Param("id") Integer id);


    /**
     * 获得今天投币数
     * @param id   用户id
     * @return
     */
    int getTodayCoinFrequency(@Param("id") Integer id);


    /**
     * 获得收藏记录
     *
     * @return
     */
    List<CollectionVo> getCollectionRecord(@Param("userId")Integer userId);

    /**
     * 获得历史记录
     *
     * @return
     */
    List<HistoryVo> getHistoryRecord(@Param("userId")Integer userId);



}
